// 接口测试
#include "util.hpp"
#include "level.hpp"
#include "message.hpp"
#include "format.hpp"
#include "sink.hpp"
#include "logger.hpp"








//-----logger------
// int main()
// {
//     std::string logger_name = "sync_logger";
//     ken_log::LogLevel::value limit = ken_log::LogLevel::value::WARN;
//     ken_log::Formatter::ptr fmt(new ken_log::Formatter("[%d{%H:%M:%S}][%c][%f:%l][%p]%T%m%n"));
//     ken_log::StdoutSink::ptr stdout_lsp = ken_log::SinkFactory::create<ken_log::StdoutSink>();
//     ken_log::FileSink::ptr file_lsp = ken_log::SinkFactory::create<ken_log::FileSink>("./logfile/test.log");
//     ken_log::RollBySizeSink::ptr roll_lsp = 
//     ken_log::SinkFactory::create<ken_log::RollBySizeSink>("./logfile/base-",1024*1024);
//     // 不同的日志落地方向
//     std::vector<ken_log::LogSink::ptr> sinks = {stdout_lsp,file_lsp,roll_lsp};
//     ken_log::Logger::ptr logger(new ken_log::SyncLogger(logger_name,limit,fmt,sinks));
//     logger->debug(__FILE__,__LINE__,"%s","测试日志");
//     logger->warn(__FILE__,__LINE__,"%s","测试日志");
//     logger->info(__FILE__,__LINE__,"%s","测试日志");
//     logger->error(__FILE__,__LINE__,"%s","测试日志");
//     logger->fatal(__FILE__,__LINE__,"%s","测试日志");
//     size_t cursize = 0, count = 0;
//     while(cursize < 1024*1024*10)
//     {
//         // 通过加一个计数器看写入的数据是否连贯
//         logger->fatal(__FILE__,__LINE__,"测试日志-%d",count++);
//         cursize += 24;
//     }
// }



//----sink------
// int main()
// {
//     ken_log::LogMsg msg(ken_log::LogLevel::value::ERROR, __FILE__, __LINE__, "日志落地类测试", "root");
//     // 使用默认的格式
//     ken_log::Formatter fmt;
//     std::string str = fmt.format(msg);
//     // 将日志进行不同方向的落地
//     // 日志直接输出
//     ken_log::LogSink::ptr stdout_lsp = ken_log::SinkFactory::create<ken_log::StdoutSink>();
//     // 向指定文件输出
//     ken_log::LogSink::ptr file_lsp = ken_log::SinkFactory::create<ken_log::FileSink>("./logfile/test.log");
//     // 向滚动文件输出
//     ken_log::LogSink::ptr roll_lsp =
//         ken_log::SinkFactory::create<ken_log::RollBySizeSink>("./logfile/roll-", 1024 * 1024); // 最大大小1MB
//     stdout_lsp->log(str.c_str(), str.size());
//     file_lsp->log(str.c_str(), str.size());
//     size_t cur_size = 0;                // 记录当前大小
//     size_t count = 0;                   // 文件计数器
//     while (cur_size < 1024 * 1024 * 10) // 10M
//     {
//         // 通过加一个计数器判断写入的数据是否都是连贯的
//         std::string tmp = str + std::to_string(count++); // 相当于在每个文件的末尾都加上了一个计数再进行写入
//         roll_lsp->log(tmp.c_str(), tmp.size());          // 文件以1mb进行切换，也就是要切换出10个文件
//         cur_size += tmp.size();
//     }
// }

//-----message---------
// int main()
// {
//     // 先定义一个日志消息
//      ken_log::LogMsg msg(ken_log::LogLevel::value::ERROR,__FILE__,__LINE__,"日志测试","root");
//     // ken_log::LogMsg msg(ken_log::LogLevel::value::INFO, __FILE__, __LINE__, 53, "main.c", "root", "格式化功能测试....");
//     ken_log::Formatter fmt("[%d{%H:%M:%S}][%t][%c][%f:%l][%p]%T%m");
//     std::string str = fmt.format(msg);
//     std::cout << str << std::endl;
// }

//-----level------
// int main()
// {
//     std::cout << kenzii_log::LogLevel::tostring(kenzii_log::LogLevel::value::DEBUG) << std::endl;
//     std::cout << kenzii_log::LogLevel::tostring(kenzii_log::LogLevel::value::ERROR) << std::endl;
//     std::cout << kenzii_log::LogLevel::tostring(kenzii_log::LogLevel::value::FATAL) << std::endl;
//     std::cout << kenzii_log::LogLevel::tostring(kenzii_log::LogLevel::value::INFO) << std::endl;
//     std::cout << kenzii_log::LogLevel::tostring(kenzii_log::LogLevel::value::OFF) << std::endl;
//     std::cout << kenzii_log::LogLevel::tostring(kenzii_log::LogLevel::value::WARN) << std::endl;
//     return 0;
// }

//-----Util--------
// int main()
// {
//     std::cout << kenzii_log::util::Date::now_time() << std::endl;
//     std::string pathname = "./abc/bcd/a.txt";
//     kenzii_log::util::File::createDirectory(kenzii_log::util::File::path(pathname));
//     return 0;
// }
